﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using FTools.Dominio;
using System.Data.SqlClient;
using System.Data;
using System.Collections;
using FTools.Generico;

namespace FTools.Persistencia
{
    class PerPedido
    {
        static string msg = "";

        //OBTENER PEDIDO
        public Pedido obtenerPedido(SqlConnection xConexion, SqlTransaction xTransaccion, long xIdPedido)
        {
            Pedido objPedido = new Pedido();
            DataTable dataTable = new DataTable();
            PerPersona objPerPersona = new PerPersona();

            try
            {
                SqlCommand command = new SqlCommand("select * from PEDIDO where ID_PEDIDO=@IdPedido");

                command.Parameters.AddWithValue("@IdPedido", xIdPedido);
                command.Connection = xConexion;
                command.Transaction = xTransaccion;
                SqlDataAdapter dataAdapter = new SqlDataAdapter(command);
                dataAdapter.Fill(dataTable);
                if (dataTable.Rows.Count >= 0)
                {
                    DataRow fila = dataTable.Rows[0];
                    Persona objPersona = objPerPersona.obtenerPersona(xConexion, xTransaccion, (long)fila.ItemArray[1]);

                    objPedido.IdPedido = (long)fila.ItemArray[0];
                    objPedido.ObjPersona = objPersona;
                    objPedido.Estado = (String)fila.ItemArray[2]; objPedido.Estado = objPedido.Estado.Trim();
                    objPedido.Fecha = (String)fila.ItemArray[3]; objPedido.Fecha = FuncionesFecha.formatoFechaDDMMAAAA(objPedido.Fecha.Trim());
                    objPedido.Hora = (String)fila.ItemArray[4]; objPedido.Hora = FuncionesFecha.formatoHoraConSep(objPedido.Hora.Trim());
                    objPedido.FechaProg = (String)fila.ItemArray[5]; objPedido.FechaProg = FuncionesFecha.formatoFechaDDMMAAAA(objPedido.FechaProg.Trim());
                    objPedido.HoraProg = (String)fila.ItemArray[4]; objPedido.HoraProg = FuncionesFecha.formatoHoraConSep(objPedido.HoraProg.Trim());
                }
                return objPedido;
            }
            catch (SqlException ex)
            {
                for (int i = 0; i < ex.Errors.Count; i++)
                {
                    msg += "Error #" + i + " Message: " + ex.Errors[i].Message + "\n";
                }
                System.Console.WriteLine(msg);
                throw new Exception("#Persistencia# " + ex.Message);
            }
        }

        //EXISTE PEDIDO
        public Boolean existePedido(SqlConnection xConexion, SqlTransaction xTransaccion, long xIdPedido)
        {
            DataTable dataTable = new DataTable();

            try
            {
                SqlCommand command = new SqlCommand("select count(*) as EXISTE from PEDIDO where ID_PEDIDO=@IdPedido");

                command.Parameters.AddWithValue("@IdPedido", xIdPedido);
                command.Connection = xConexion;
                command.Transaction = xTransaccion;
                SqlDataAdapter dataAdapter = new SqlDataAdapter(command);
                dataAdapter.Fill(dataTable);
                if (dataTable.Rows.Count >= 0)
                {
                    DataRow fila = dataTable.Rows[0];
                    if ((int)fila.ItemArray[0] > 0)
                    {
                        return true;
                    }
                }
                return false;
            }
            catch (SqlException ex)
            {
                for (int i = 0; i < ex.Errors.Count; i++)
                {
                    msg += "Error #" + i + " Message: " + ex.Errors[i].Message + "\n";
                }
                System.Console.WriteLine(msg);
                throw new Exception("#Persistencia# " + ex.Message);
            }
        }

        //OBTENER COLECCION PEDIDO (IdPersona, Estado)
        public ArrayList obtenerColeccionPedido(SqlConnection xConexion, SqlTransaction xTransaccion, long xIdPersona, String xEstado)
        {
            SqlDataAdapter dataAdapter;
            DataTable dataTable = new DataTable();
            ArrayList colPedido = new ArrayList();
            PerPersona objPerPersona = new PerPersona();

            try
            {
                SqlCommand command = new SqlCommand("select * from PEDIDO where " + 
                                                    "ID_PERSONA=@IdPersona and " +
                                                    "(ESTADO=@Estado or @Estado='')");

                command.Parameters.AddWithValue("@IdPersona", xIdPersona);
                command.Parameters.AddWithValue("@Estado", xEstado);
                command.Connection = xConexion;
                command.Transaction = xTransaccion;
                dataAdapter = new SqlDataAdapter(command);
                dataAdapter.Fill(dataTable);
                for (int i = 0; i < dataTable.Rows.Count; i++)
                {
                    Pedido objPedido = new Pedido();
                    DataRow fila = dataTable.Rows[i];
                    Persona objPersona = objPerPersona.obtenerPersona(xConexion, xTransaccion, (long)fila.ItemArray[1]);

                    objPedido.IdPedido = (long)fila.ItemArray[0];
                    objPedido.ObjPersona = objPersona;
                    objPedido.Estado = (String)fila.ItemArray[2]; objPedido.Estado = objPedido.Estado.Trim();
                    objPedido.Fecha = (String)fila.ItemArray[3]; objPedido.Fecha = FuncionesFecha.formatoFechaDDMMAAAA(objPedido.Fecha.Trim());
                    objPedido.Hora = (String)fila.ItemArray[4]; objPedido.Hora = FuncionesFecha.formatoHoraConSep(objPedido.Hora.Trim());
                    objPedido.FechaProg = (String)fila.ItemArray[5]; objPedido.FechaProg = FuncionesFecha.formatoFechaDDMMAAAA(objPedido.FechaProg.Trim());
                    objPedido.HoraProg = (String)fila.ItemArray[4]; objPedido.HoraProg = FuncionesFecha.formatoHoraConSep(objPedido.HoraProg.Trim());
                    colPedido.Add(objPedido);
                }
                return colPedido;
            }
            catch (SqlException ex)
            {
                for (int i = 0; i < ex.Errors.Count; i++)
                {
                    msg += "Error #" + i + " Message: " + ex.Errors[i].Message + "\n";
                }
                System.Console.WriteLine(msg);
                throw new Exception("#Persistencia# " + ex.Message);
            }
        }

        //ALTA PEDIDO
        public int altaPedido(SqlConnection xConexion, SqlTransaction xTransaccion, Pedido xObjPedido)
        {
            try
            {
                SqlCommand command = new SqlCommand("insert into PEDIDO values (@IdPedido, @IdPersona, @Estado, @Fecha, @Hora, @FechaProg, @HoraProg)");

                command.Parameters.AddWithValue("@IdPedido", xObjPedido.IdPedido);
                command.Parameters.AddWithValue("@IdPersona", xObjPedido.ObjPersona.IdPersona);
                command.Parameters.AddWithValue("@Estado", xObjPedido.Estado.Trim());
                command.Parameters.AddWithValue("@Fecha", FuncionesFecha.formatoFechaAAAAMMDD(xObjPedido.Fecha.Trim()));
                command.Parameters.AddWithValue("@Hora", FuncionesFecha.formatoHoraSinSep(xObjPedido.Hora.Trim()));
                command.Parameters.AddWithValue("@FechaProg", FuncionesFecha.formatoFechaAAAAMMDD(xObjPedido.FechaProg.Trim()));
                command.Parameters.AddWithValue("@HoraProg", FuncionesFecha.formatoHoraSinSep(xObjPedido.HoraProg.Trim()));

                command.Connection = xConexion;
                command.Transaction = xTransaccion;
                return command.ExecuteNonQuery();
            }
            catch (SqlException ex)
            {
                for (int i = 0; i < ex.Errors.Count; i++)
                {
                    msg += "Error #" + i + " Message: " + ex.Errors[i].Message + "\n";
                }
                System.Console.WriteLine(msg);
                throw new Exception("#Persistencia# " + ex.Message);
            }
        }

        //BAJA PEDIDO
        public int bajaPedido(SqlConnection xConexion, SqlTransaction xTransaccion, Pedido xObjPedido)
        {
            try
            {
                SqlCommand command = new SqlCommand("delete from PEDIDO where ID_PEDIDO=@IdPedido");

                command.Parameters.AddWithValue("@IdPedido", xObjPedido.IdPedido);
                command.Connection = xConexion;
                command.Transaction = xTransaccion;
                return command.ExecuteNonQuery();
            }
            catch (SqlException ex)
            {
                for (int i = 0; i < ex.Errors.Count; i++)
                {
                    msg += "Error #" + i + " Message: " + ex.Errors[i].Message + "\n";
                }
                System.Console.WriteLine(msg);
                throw new Exception("#Persistencia# " + ex.Message);
            }
        }

        //MODIFICA PEDIDO
        public int modificaPedido(SqlConnection xConexion, SqlTransaction xTransaccion, Pedido xObjPedido)
        {
            try
            {
                SqlCommand command = new SqlCommand("update PEDIDO set ID_PERSONA=@IdPersona, FECHA=@Fecha, HORA=@Hora, FECHA_PROG=@FechaProg, HORA_PROG=@HoraProg " +
                                                    "where ID_Pedido = @IdPedido");

                command.Parameters.AddWithValue("@IdPedido", xObjPedido.IdPedido);
                command.Parameters.AddWithValue("@Nombre", xObjPedido.ObjPersona.IdPersona);
                command.Parameters.AddWithValue("@Fecha", xObjPedido.Fecha.Trim());
                command.Parameters.AddWithValue("@Hora", xObjPedido.Hora.Trim());
                command.Parameters.AddWithValue("@FechaProg", xObjPedido.FechaProg.Trim());
                command.Parameters.AddWithValue("@HoraProg", xObjPedido.HoraProg.Trim());

                command.Connection = xConexion;
                command.Transaction = xTransaccion;
                return command.ExecuteNonQuery();
            }
            catch (SqlException ex)
            {
                for (int i = 0; i < ex.Errors.Count; i++)
                {
                    msg += "Error #" + i + " Message: " + ex.Errors[i].Message + "\n";
                }
                System.Console.WriteLine(msg);
                throw new Exception("#Persistencia# " + ex.Message);
            }
        }
    }
}
